#ifndef _SYS_TIME_ZONE_H_
#define _SYS_TIME_ZONE_H_

#include "FanObj.h"
#include "SysTypes.h"

#define TIME_ZONE_VTABLE(self)   ((TimeZoneVTable*)((FanObj*)self)->vtable)


extern Type*    TimeZone_classType;
extern VTable*  TimeZone_classVTable;


/* [sys::TimeZone] Attributes */
struct TimeZone
{
  FanObj        super;
};


/* [sys::TimeZone] Virtual-table */
typedef struct TimeZoneVTable
{
  FanObjVTable  super;
} TimeZoneVTable;


/* [sys::TimeZone] Methods and fields */
Str*            TimeZone_toStr(Obj self);
List*           TimeZone_listNames(void);
List*           TimeZone_listFullNames(void);
TimeZone*       TimeZone_fromStr_1(Str* name);
TimeZone*       TimeZone_fromStr(Str* name, Bool checked);
TimeZone*       TimeZone_utc(void);
TimeZone*       TimeZone_rel(void);
TimeZone*       TimeZone_cur(void);
TimeZone*       TimeZone_defVal(void);
Str*            TimeZone_name(TimeZone* self);
Str*            TimeZone_fullName(TimeZone* self);
Duration*       TimeZone_offset(TimeZone* self, Int year);
Duration*       TimeZone_dstOffset(TimeZone* self, Int year);
Str*            TimeZone_stdAbbr(TimeZone* self, Int year);
Str*            TimeZone_dstAbbr(TimeZone* self, Int year);


/* [sys::TimeZone] Type-system functions */
Type*           TimeZone_initType(void);
VTable*         TimeZone_initVTable(void);
void            TimeZone_initStatic(void);


#endif
